📌

[GIT]버전만들기

01. 작업트리스테이지, 저장소

source from https://mung0001.github.io/ST.png , Do it! 지옥에서 온 문서 관리자 깃 & 깃허브 입문

ⓐ 작업 트리 Working Tree

ⓑ 스테이지 Stage

ⓒ 저장소 Repository

📌 .git 폴더 ◀️ 스테이지 + 저장소

02. 깃이 버전을 만드는 과정

source from https://mung0001.github.io/ST.png , Do it! 지옥에서 온 문서 관리자 깃 & 깃허브 입문
  1. hello.txt 파일 문서를 수정하고 저장하면, 그 파일은 작업트리에 존재
  1. 수정한 hello.txt 파일을 버전으로 만들고 싶을 때 스테이지에 그 파일을 넣는다(위의 그림의 "1")
  1. 커밋(commit) 명령을 통해서 버전이 생성되면서 스테이지에서 대기하던 파일들이 모두 저장소에 저장된다!

03. 작업트리에서 vim으로 문서 수정하기

저는 우선 제가 TIL을 올리는 디렉터리에서 git bash로 수행해보았습니다

ⓐ 터미널 창에 git status를 입력해보면 아래와 같은 화면이 보일 것인데

각 결과의 의미는 아래와 같다

: 현재 main 브랜치 에 있고

: 당신의 브랜치는 origin/main으로 달려 있다

ⓑ 아래와 같이 새로운 문서를 만들기 위해서 새로운 폴더를 만들자

💡
mkdir vcsTest
💡
cd ./vcsTest

vim hello.txt를 입력해서 hello.txt 파일을 만들자

내용은 자유롭게 입력하고, esc키+:wq 를 눌러서 저장해주자!(입력을 위해서는 알파벳 i 키를 눌러주면 insert 모두가 된다)

ⓓ 그리고 생성된 파일을 ls -al 로 확인하고, git status를 체크해보면

아래와 같이 확인되는데 이를 해석해보면 아래와 같다

: 현재 main 브랜치 에 있고

: 당신의 브랜치는 origin/main으로 달려 있다

-hello.txt파일을 만들고 과정을 기록하기 위해서 이미지를 캡쳐했는데 그러한 파일이 먼저 확인되는 것을 확인해볼 수 있다

🌟 지금까지는 hello.txt파일은 "작업트리 Working tree"에 있는 것이다!!

04. 수정한 파일을 스테이징하기 git add

💡
git add . 혹은 git add hello.txt

위를 입력해서 업로드할 파일을 추가해주자(선택적으로 파일을 버전으로 만들 수 있음)

그리고 git status 를 입력해주면 아래와 같이 표시되는데

💡
Changes to be committed: (use "git restore --staged <file>..." to unstage) new file: hello.txt

여전히 untracked files로 이미지들이 확인된다.

상대적으로 가장 상위 폴더라 할 수 있는 TIL 폴더로 이동한 후

git add .git status를 해보면 더이상 버전 관리가 되지 않은 파일들에 이미지들이 표시되지 않는다!

이 때 나타나는 new file: 이라는 수식어는 새 파일 ~를 (앞으로) 커밋할 것 이라는 의미를 갖는다! 이제 스테이지에 파일들이 올라갔고, 버전을 만들 준비가 끝났다!

04-1. 스테이지에 올릴 때 경고 메시지가 나타나는 이유

앞서서 hello.txt 파일을 만들고 스테이징할 때,

💡
warning: LF will be replaced by CRLF in gitStudy/vcsTest/hello.txt. The file will have its original line endings in your working directory

위와 같은 경고 문구를 확인하게 된다

그 이유는 윈도우의 개행 문자와 리눅스의 개행 문자가 다르고,

윈도우에서 문서 저장 시 줄바꿈 위치에서 CRLF문자(Carriage Return Line Feed)[CR: \r, LF:\n] 가 삽입되기 때문에 발생한 것이다!

이 때 깃에서는 자동으로 CRLF 문자를 LF 문자로 변환해서 커밋할 것이라는 메시지이다! 사용자가 별도로 조치할 필요는 없다!

05. 스테이지에 올라온 파일 커밋하기 git commit

ⓐ 깃에서 파일을 커밋하는 명령은 git commit 이고, -m 옵션을 붙이면 커밋과 함께 저장할 메시지(커밋메시지)를 적을 수 있다!

💡
git commit -m 'test git'

ⓑ 이제 결과를 통해 커밋메시지를 가장 첫 줄에서 확인해볼 수 있고, 5개 파일에 변경되었고, 파일에 1개의 내용이 추가되었다고 나타난다!

[main ~] test git

5 files changed, 1 insertion(+)

ⓒ 이제 git status를 입력하면, 깃 상태가

라고 표시되는 것을 확인해볼 수 있다

git log를 입력해보자

1) 커밋 메시지

2) 작성자(git config --global user.name, git config --global user.email 로 설정해둔 내용 기반)

3) 작성 일자 및 시간(타임존 기반)

을 확인해볼 수 있다

이렇게 되면 지금은 작업 트리와 저장소에 hello.txt 등의 파일이 존재하게 되는 것이다!

(스테이지에서 저장소로 파일들이 이동)

06. 스테이징커밋 한번에!! git commit -am

위의 "a" 이유로, 미리 만들었던 hello.txt를 수정해주자

그 후, git commit -am 'commit with am option test' 를 입력해주자

그 후 git log 에서 위의 커밋 버전을 확인해볼 수 있다

07. 커밋 메시지의 역사를 알아보는 git log

-그 중 +++로 된 부분이 최근 변경된 파일/이번 버전의 내용을 나타내고, —-로 된 부분이 이전 버전의 내용을 나타낸다

💡
—- /dev/null, +++ b/f2.txt

위의 경우에는 이전버전에서는 파일이 존재하지 않았는데 이번 버전에서는 파일이 생성되었다는 의미이다

-각각의 커밋은 각자 고유의 아이디 번호가 있다! 그것이 바로 로그 결과의 "commit~"내용 중 "~"에 해당되는 숫자와 영어의 조합이다![맨 첫줄]

-커밋아이디는 각 버전의 고유값!

💡
$ git diff d73c36e1f85c8ad64488b07c574637918f0056ed..40d344f73631bd8f15d90fe50d01eeaf85037ffc

위와 같이 테스트해보면, ..을 기준으로 앞부분을 보다 최근의 아이디이고 뒷부분을 이전 아이디로 적어서 테스트해보았는데 그 결과 이전에는 vcsTest.txt와 hello2.txt가 없었는데 생성되었음을 확인해볼 수 있다

[—가 이때는 ..기준으로 앞과 뒤 중 "앞"에 해당되는데, 위의 경우는 "최근"이 된다!◀️ 최근값을 왼쪽에 두었기 때문에]

💡
vim hello.txt

로 파일을 수정하고

💡
get diff

를 입력하면 아래와 같이 이전에는 hello2.txt에서 버전관리 테스트 깃 최고 222의 내용이 있었는데, 지금은 아래와 같은 내용이 추가되었음을 확인해볼 수 있다

즉, 이를 통해서 내용변경을 확인해볼 수 있다

이는 커밋 전 작업 내용의 문제점을 마지막으로 확인해볼 수 있는 리뷰기회를 가질 수 있도록 도와준다![버전관리 시스템의 효용!]

+버전관리 테스트 깃 최고 222111111111111111111
+깃 수정수정
+git diff 테스트중

08. 과거로 돌아가기(현재의 로그를 취소하고 과거의 로그로 돌아가기)

08-1. 과거로 돌아가기 방법1-reset

💡
git reset 과거값 —hard

지금의 경우에는 git reset b5bf9f06eb45f2233cfccca0f4f58fabdd08df31 --hard 로 실행해주면 된다!

그러면, b5bf9f06eb45f2233cfccca0f4f58fabdd08df31 버전까지 없어지는 것이 아니라 b5bf9f06eb45f2233cfccca0f4f58fabdd08df31버전이전까지만 사라지는 것이다! 즉, [최근,과거) 가 사라지는 버전이다!

Git - Reset 명확히 알고 가기
git cat-file -p HEAD tree cfda3bf379e4f8dba8717dee55aab78aef7f4daf author Scott Chacon 1301511835 -0700 committer Scott Chacon 1301511835 -0700 initial commit $ git ls-tree -r HEAD 100644 blob a906cb2a4a904a152... README 100644 blob 8f94139338f9404f2... Rakefile 040000 tree 99f1a6d12cb4b6f19... lib
https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-Reset-%EB%AA%85%ED%99%95%ED%9E%88-%EC%95%8C%EA%B3%A0-%EA%B0%80%EA%B8%B0

🌹 깃에서 알아둘 것 🌹

ⓐ 깃에서는 왠만해서는 어떠한 정보도 삭제하지 않는다

ⓑ 자신의 버전을 원격연결을 통해 공유를 할 수 있는데, 공유한 이후에는 절대로 reset해서는 안된다!(본인의 컴퓨터 내에서만 리셋해야 한다!)

08-2. 과거로 돌아가기 방법2-revert


git commit 을 입력하고 나타나는 vim 에디터에서 커밋 버전을 기입해줘도 된다!!

git commit --help 를 입력하면 commit에 대한 도움을 받을 수 있는 사이트를 확인해볼 수 있다